﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.IO;

namespace map.swf
{
    public partial class upload : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            System.Drawing.Image thumbnail_image = null;
            System.Drawing.Image original_image = null;
            System.Drawing.Bitmap final_image = null;
            System.Drawing.Graphics graphic = null;
            MemoryStream ms = null;

            try
            {
                // Get the data
                HttpPostedFile jpeg_image_upload = Request.Files["Filedata"];

                string thumbnail_id = DateTime.Now.ToString("yyyyMMddHHmmssfff");
                int fileTypeIndex = jpeg_image_upload.FileName.LastIndexOf(".");
                string fileType = jpeg_image_upload.FileName.Substring(fileTypeIndex + 1).ToLower();
                string fileName = Server.MapPath(ResolveUrl("~/swf/upload/" + thumbnail_id + "." + fileType));
                byte[] data = new byte[jpeg_image_upload.ContentLength ];
                jpeg_image_upload.InputStream.Read(data, 0, jpeg_image_upload.ContentLength);
                jpeg_image_upload.InputStream.Seek(0, SeekOrigin.Begin);
                Thumbnail thumb = new Thumbnail(thumbnail_id, "/swf/upload/" + thumbnail_id + "." + fileType, fileType, data);
                List<Thumbnail> thumbnails = Session["file_info"] as List<Thumbnail>;
                if (thumbnails == null)
                {
                    thumbnails = new List<Thumbnail>();
                    Session["file_info"] = thumbnails;
                }
                thumbnails.Add(thumb);
                jpeg_image_upload.SaveAs(fileName);

                Response.StatusCode = 200;
                Response.Write(thumbnail_id);

                //下面是以前的方法
                //// Retrieve the uploaded image
                //original_image = System.Drawing.Image.FromStream(jpeg_image_upload.InputStream);

                //// Calculate the new width and height
                //int width = original_image.Width;
                //int height = original_image.Height;
                //int target_width = 100;
                //int target_height = 100;
                //int new_width, new_height;

                //float target_ratio = (float)target_width / (float)target_height;
                //float image_ratio = (float)width / (float)height;

                //if (target_ratio > image_ratio)
                //{
                //    new_height = target_height;
                //    new_width = (int)Math.Floor(image_ratio * (float)target_height);
                //}
                //else
                //{
                //    new_height = (int)Math.Floor((float)target_width / image_ratio);
                //    new_width = target_width;
                //}                              

                //new_width = new_width > target_width ? target_width : new_width;
                //new_height = new_height > target_height ? target_height : new_height;


                //// Create the thumbnail

                //// Old way
                ////thumbnail_image = original_image.GetThumbnailImage(new_width, new_height, null, System.IntPtr.Zero);
                //    // We don't have to create a Thumbnail since the DrawImage method will resize, but the GetThumbnailImage looks better
                //    // I've read about a problem with GetThumbnailImage. If a jpeg has an embedded thumbnail it will use and resize it which
                //    //  can result in a tiny 40x40 thumbnail being stretch up to our target size


                //final_image = new System.Drawing.Bitmap(target_width, target_height);
                //graphic = System.Drawing.Graphics.FromImage(final_image);
                //graphic.FillRectangle(new System.Drawing.SolidBrush(System.Drawing.Color.Black), new System.Drawing.Rectangle(0, 0, target_width, target_height));
                //int paste_x = (target_width - new_width) / 2;
                //int paste_y = (target_height - new_height) / 2;
                //graphic.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic; /* new way */
                ////graphic.DrawImage(thumbnail_image, paste_x, paste_y, new_width, new_height);
                //graphic.DrawImage(original_image, paste_x, paste_y, new_width, new_height);

                //// Store the thumbnail in the session (Note: this is bad, it will take a lot of memory, but this is just a demo)
                //ms = new MemoryStream();
                //final_image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);

                //// Store the data in my custom Thumbnail object
                //string thumbnail_id = DateTime.Now.ToString("yyyyMMddHHmmssfff");
                //Thumbnail thumb = new Thumbnail(thumbnail_id, ms.GetBuffer());

                //// Put it all in the Session (initialize the session if necessary)			
                //List<Thumbnail> thumbnails = Session["file_info"] as List<Thumbnail>;
                //if (thumbnails == null)
                //{
                //    thumbnails = new List<Thumbnail>();
                //    Session["file_info"] = thumbnails;  
                //}
                //thumbnails.Add(thumb);

                //int fileTypeIndex = jpeg_image_upload.FileName.LastIndexOf(".");
                //string fileType = jpeg_image_upload.FileName.Substring(fileTypeIndex);
                ////jpeg_image_upload.SaveAs(ResolveUrl("~/swf/upload/" + thumbnail_id + fileType));
                ////jpeg_image_upload.SaveAs(ResolveUrl (""+""));
                ////SaveFiles();
                //Response.StatusCode = 200;
                //Response.Write(thumbnail_id); 


            }
            catch
            {
                // If any kind of error occurs return a 500 Internal Server error
                Response.StatusCode = 500;
                Response.Write("An error occured");
                Response.End();
            }
            finally
            {
                // Clean up
                if (final_image != null) final_image.Dispose();
                if (graphic != null) graphic.Dispose();
                if (original_image != null) original_image.Dispose();
                if (thumbnail_image != null) thumbnail_image.Dispose();
                if (ms != null) ms.Close();
                Response.End();
            }
        }
    }
}
